package com.xiaoma.thread.wait.producer;

import java.util.ArrayList;
import java.util.List;

/**
 * https://www.liaoxuefeng.com/wiki/1252599548343744/1306580911915042
 * 参考链接：https://blog.csdn.net/HD243608836/article/details/98117055?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
 * @author xiaomacdut
 * @date 2020年2月22日 上午10:03:56
 */
public class Main{
    
    public static void main(String [] args) throws InterruptedException{
        final TaskQueue queue = new TaskQueue();
        List<Thread> threads = new ArrayList<Thread>();
        
        for(int i = 0; i < 5; i++){
            Thread t = new Thread(){
                public void run(){
                    // 执行task:
                    while(true){
                        try{
                            String s = queue.getTask();
                            System.out.println("execute task: " + s);
                        }catch(InterruptedException e){
                            return;
                        }
                    }
                }
            };
            t.start();
            threads.add(t);
        }
        
        
        // 线程添加10个任务
        Thread add = new Thread(()-> {
            for(int i = 0; i < 10; i++){
                // 放入task:
                String s = "t-" + Math.random();
                System.out.println("add task: " + s);
                queue.addTask(s);
                try{
                    Thread.sleep(100);
                }catch(InterruptedException e){
                }
            }
        });
        // main启动add线程
        add.start();
        // add线程加入，main线程先暂停执行，等待add线程执行完后main线程接着执行
        add.join();
        
        
        Thread.sleep(100);
        // 因为threads中的线程都是是死循环，要把这些那个死循环都中断掉程序才能结束
        for(Thread t : threads){
            t.interrupt();
        }
    }
}
